//带参数的宏
#define SingH(name) +(instancetype)shareTool##name;
#define SingM(name) static id _instance;\
+ (instancetype)shareTool##name{\
    \
    return [[self alloc]init];\
}\
+ (instancetype)allocWithZone:(struct _NSZone *)zone{\
    static dispatch_once_t onceToken;\
    dispatch_once(&onceToken, ^{\
        _instance = [super allocWithZone:zone];\
    });\
    return _instance;\
}\
-(id)copyWithZone:(NSZone *)zone{\
    return  _instance;\
}\
- (id)mutableCopyWithZone:(NSZone *)zone{\
    \
    return _instance;\
}
